// 组件接口 `Component`，定义了操作方法 `operation()`。
trait Component {
    fn operation(&self) -> String;
}

// 具体组件 `ConcreteComponent`，实现了 `Component` 接口。
struct ConcreteComponent;

// 实现 `Component` 接口的方法。
impl Component for ConcreteComponent {
    fn operation(&self) -> String {
        "ConcreteComponent".to_string() // 返回具体组件的操作结果
    }
}

// 装饰器 `Decorator` 结构体，实现了 `Component` 接口。
struct Decorator {
    component: Box<dyn Component>, // 使用 `Box<dyn Component>` 包含一个组件对象
}

// 实现 `Decorator` 结构体的方法。
impl Decorator {
    // 构造函数 `new()`，初始化装饰器并传入一个实现了 `Component` 接口的对象。
    fn new(component: Box<dyn Component>) -> Self {
        Self { component }
    }
}

// `Decorator` 结构体也实现了 `Component` 接口，重写了 `operation()` 方法。
impl Component for Decorator {
    fn operation(&self) -> String {
        format!("Decorator({})", self.component.operation()) // 在组件操作结果外加上装饰器的标记
    }
}

// 主函数入口 `main()`，演示装饰模式的使用。
pub fn main() {
    let component = ConcreteComponent; // 创建具体组件 `ConcreteComponent` 的实例
    let decorator = Decorator::new(Box::new(component)); // 创建装饰器 `Decorator` 的实例，传入具体组件

    // 调用装饰器的操作方法 `operation()`，并打印结果
    println!("Result: {}", decorator.operation());
}
